const express = require('express');
const app = express();
app.listen(9000, () => {
  console.log('服务器9000启动成功');
});

// 全局中间件：客户端发起请求到达服务器后都会被触发的中间件被称作全局中间件，注意中间件在路由前被注册才生效
app.use((req, res, next) => {
  console.log('全局中间件1');
  req.globalFlag = true;
  next();
});
app.use((req, res, next) => {
  console.log('全局中间件2');
  next();
});
app.get('/middleware_global', (req, res) => {
  if (req.globalFlag) console.log('中间件共享请求响应对象');
  res.end();
});

// 局部中间件：客户端发起请求到达服务器后不都会被触发的中间件被称作局部中间件，局部中间件存在两种注册方式
app.use('/middleware_scope', (req, res, next) => {
  console.log('局部中间件1');
  req.scopeFlag = true;
  next();
});
app.get(
  '/middleware_scope',
  (req, res, next) => {
    console.log('局部中间件2');
    next();
  },
  (req, res) => {
    if (req.globalFlag && req.scopeFlag) console.log('中间件共享请求响应对象');
    res.end();
  }
);

// 访问路径 http://localhost:9000/middleware_global 输出结果：全局中间件1 全局中间件2 中间件共享请求响应对象
// 访问路径 http://localhost:9000/middleware_scope 输出结果：全局中间件1 全局中间件2 局部中间件1 局部中间件2 中间件共享请求响应对象